/*
 * CLASS: Product.java
 */

package model;

import java.io.Serializable;
import java.util.ArrayList;

/**
 *
 * @author Samuele Mattiuzzo
 */
public class Product implements Serializable {

    private int pid;
    private String type;
    private String title;
    private String genre;
    private String description;
    private Author authors;
    private Rental rent;
    private boolean isRented = false;
    private ArrayList<Booking> bookings = new ArrayList<Booking>();

    /**
     * Costruttore pubblico della classe product
     * @param i id
     * @param t titolo
     * @param g genere
     * @param d descrizione
     * @param a autore
     * @param k tipo di prodotto
     */
    public Product(int i, String t, String g, String d, Author a, String k){
        pid = i;
        title = t;
        genre = g;
        description = d;
        authors = a;
        type=k;
    }
    /**
     * Metodo che mostra le informazioni del prodotto
     * @return la stringa contenente le informazioni
     */
    public String displayInfo(){

        String ret = "<html><br>ID: "+getProductId();
        ret += "<br><br>Titolo: "+getTitle();
        ret += "<br><br>Tipo: "+getType();
        ret += "<br><br>Autore: "+getAuthors().toString();
        ret += "<br><br>Genere: "+getGenre();
        ret += "<br><br>Descrizione: \n";
        ret += getDetails();
        ret += "<br><br>Disponibile "+getRented()+"</html>";
        return ret;
    }

    
    /**
     * Informazioni sul product id
     * @return pid id
     */
    public int getProductId() {
        return pid;
    }
 
    /**
     * Titolo del prodotto
     * @return title
     */
    public String getTitle() {
        return title;
    }

    /**
     * Autori del prodotto
     * @return lista degli autori
     */
    public Author getAuthors() {
        return authors;
    }

    /**
     * Genere del prodotto
     * @return genre
     */
    public String getGenre() {
        return genre;
    }

    /**
     * Tipo del prodotto
     * @return type
     */
    public String getType() {
        return type;
    }

    /**
     * Stato del noleggio: disponibile da subito o data di rientro
     * @return stringa "subito" o stringa "dal gg/mm/aaaa"
     */
    public String getRented() {
        if(isRented()){
            //data della disponibilità
            return "dal "+rent.getEnd();
        }else{
            return "da subito";
        }
    }

    /**
     * Dettagli del prodotto
     * @return details dettagli del prodotto
     */
    public String getDetails() {
        return description;
    }

    /**
     * Ottiene dettagli sul prestito
     * @return rent prestito effettuato
     */
    public Rental getRental(){
        return rent;
    }

    /**
     * Setta un nuovo prestito
     * @param r il nuovo prestito
     */
    public void setRental(Rental r){
        rent = r;
        isRented = true;
    }

    /**
     * Rimuove un prestito
     */
    public void removeRental(){
        rent = null;
        isRented = false;
    }

    /**
     * Dice se il prodotto e' in prestito
     * @return isRented boolean
     */
    public boolean isRented(){
        return isRented;
    }
    /**
     * Ottiene la lista delle prenotazioni
     * @return bookings lista delle prenotazioni
     */
    public ArrayList<Booking> getBooking(){
        return bookings;
    }

    /**
     * Rimuove una prenotazione
     * @param u utente della prenotazione
     */
    public void removeBooking(Booking b){
        bookings.remove(b);
    }
    /**
     * Aggiunge una prenotazione alla coda del prodotto
     * @param b prenotazione
     */
    public void addBooking(Booking b){
        bookings.add(b);
    }

}
